A computer system may include an input/output device (I/O device) that is operable to conduct data transfers across a data network. The I/O device may be associated with a device driver that provides commands to or otherwise controls the operation of the I/O device. In transferring data, the device driver may cause the I/O device to transmit data across a network or receive data from across the network. In either case, the device driver may provide the I/O device with an allocation of system memory for use in the data transfer. During a receive operation, packets or other data received from across the network may be stored in the allocated system memory. During a transmit operation, the allocated memory may hold the packets or other data to be transmitted across the network.
In order to efficiently utilize resources of the computer system, the I/O device may include a processor, controller or other device that is operable to directly access system memory. In particular, the I/O device may access the system memory without the intervention of the computer system's central processing unit or units as the case may be. During a data transfer, the I/O device may directly access the allocation of memory provided by the device driver. In order to ensure consistency of data, the computer's operating system or other component may designate certain segments of system memory for the exclusive use of a particular device or component. In connection with data transfers to and from an I/O device, the memory allocation provided by the device driver may be designated for use only by the I/O device until it is used in connection with a transmit or a receive operation. Once the memory allocation is so used, the I/O device may relinquish exclusive control of the memory allocation. Once this occurs, control of the memory allocation may pass to another computer system component, such as the device driver. However, in some instances, the circumstances of a particular transmit or receive operation may result in an incomplete usage of a particular memory allocation. In these cases, the I/O device may retain control of the incompletely used memory allocation for an indefinite amount of time. Accordingly, the device driver may resort to off-lining the receive or transmit operation in order to regain control of the incompletely used memory allocation. In certain cases, this may result in loss of packets or other inefficiencies.